home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 April / CHIP 1996 aprilis (CD06).zip / CHIP_CD06.ISO / hypertxt.arj / 9510 / HIEW.CD < prev    next >
Text File  |  1996-03-03  |  15KB  |  229 lines

  1.           @VHiew 5.0 beta, IDA 3.04@N
  2.  
  3.           @VSzerszámok bitfaragóknak@N
  4.  
  5.               A programozók meglévô kódjaik böngészésére, patchelésére
  6.           többnyire   hexa  editorokat   használnak.  Az   ASCII--hexa
  7.           megjelenítés  gyakran   mégsem  elég,   a  program   logikai
  8.           szerkezetéhez  jobban  illeszkedô  vizsgáló  eszközökre   is
  9.           szükség lehet.
  10.               Elôször a  nézôkék egy  speciális fajtáról  (pontosabban
  11.           ennek egyik  képviselôjérôl) lesz  szó: ezek  elsô ránézésre
  12.           szimpla  szöveg- és  hexa editornak  tûnnek, de  van  bennük
  13.           assembler  és  disassembler  is.  îgy  nemcsak  megvizsgálni
  14.           tudunk egy-egy programot, hanem rögtön módosíthatjuk is azt.
  15.           Ideális kiegészítôi így  a különbözô disassembler  (Sourcer,
  16.           IDA  stb.)  és  debugger  (Turbo  Debugger,  Soft-ICE  stb.)
  17.           programoknak. Ezek közül az  IDA a legkevésbé ismert,  pedig
  18.           igen hasznos  (rövid ismertetôt  adunk róla  a cikk  végén).
  19.           Jelenleg az egyik legjobb programbütykölô eszköz a shareware
  20.           Hiew 5.0 beta.
  21.  
  22.  
  23.           @VHiew 5.0 beta@N
  24.  
  25.               A program elsô betöltôdésekor szöveges üzemmódban indul.
  26.           Ezen kívül lehetünk még hexa és disassembler üzemmódban  is.
  27.           A disassembler 386-os utasításokat  ismer, és az 5.0  verzió
  28.           egyik fô újdonsága az,  hogy a beépített assembler  is ismer
  29.           már 386-os utasításokat.  Kérésre file-ba menti  az aktuális
  30.           üzemmódot -- ezért említettem, hogy elsô indításakor kezdünk
  31.           szöveges módban.
  32.               Tehát elindult  a Hiew,  és szöveges  üzemmódban van.  A
  33.           program kiválóan használható  erre is, ugyanis  meglehetôsen
  34.           sokféle sorvég-megadási módot ismer, a DOS CR/LF-jét, a Unix
  35.           CR-jét, a Macintosh-os  LF-et, végül a  C stílusú 0-s  ASCII
  36.           kódú jelet.
  37.               A  Hiew  keresni  is  tud,  mégpedig  meglepôen gyorsan.
  38.           Például a Volkov Commandernél majdnem kétszer gyorsabb  (ezt
  39.           a DOOM2.WAD file-on mértem le). Gyorsasága azért is meglepô,
  40.           mert a legtöbb nézôke  nagyjából a VC sebességével  keres. A
  41.           Hiew elôre és hátrafelé is tud keresni, de nem állítható be,
  42.           hogy  megkülönböztesse  a   kis-  és  nagybetûket.   Szintén
  43.           sajnálatos, hogy nem menti el automatikusan valami  kellemes
  44.           helyre a keresett stringet. (Már láttam olyan hexa  editort,
  45.           ami  a  memóriába, a  Volkov  Commander keresési  stringjébe
  46.           mentett.)  Nagyon  kellemes,  hogy  a  már  említett  386-os
  47.           assembler itt is használható: assembly utasítások formájában
  48.           is  megadhatjuk  a  keresni  valót.  Ezeket  az utasításokat
  49.           automatikusan  átfordítja   hexa  megfelelôikre   és  azokat
  50.           keresi.
  51.               A keresés leszûkíthetô egy blokkra -- ami azért  furcsa,
  52.           mert  blokkokat  csak  a  hexa  és  a  kód  üzemmódban lehet
  53.           kijelölni,  és  ezek  nem  is  látszanak  szöveg üzemmódban.
  54.           Mindenesetre ha a keresést blokkra szûkítjük, mindenképpen a
  55.           blokkban keres, akkor is, ha az nem is látható. Ráadásul  az
  56.           assembler már itt is mûködik kereséskor -- szemmel láthatóan
  57.           egyetlen  keresôrutin  van,  ami  független  a megjelenítési
  58.           módtól.
  59.               Ha  továbblépünk  a szöveges  üzemmódból,  akkor a  hexa
  60.           üzemmód  következik.  Ha  már  blokkokról  volt  szó, lássuk
  61.           rögtön a lehetôségeket: a blokkok eleje és vége ugyanazzal a
  62.           gombbal  jelölhetô ki,  és a  blokk már  jelölés közben  más
  63.           színû.  Az  elejére  és  a  végére  is  léphetünk.  A végére
  64.           ugrással vigyázzunk, mert amíg nincs megjelölve a blokk vége
  65.           is, a blokk vége az  elejére kerül ilyenkor -- tehát  elvész
  66.           az eddigi kijelölés.  A blokkot kijelölés  után kimenthetjük
  67.           lemezre és késôbb betölthetjük.
  68.               Érdekes  dolog  adódik  a  betöltésnél  is:  a  kijelölt
  69.           blokkot  csak  hosszmegjelölésre   hasznosítja  a  Hiew,   a
  70.           tényleges betöltés a kurzortól történik -- szerintem ez  nem
  71.           lehetôség, hanem  hiba. (Mivel  a tesztelt  verzió még béta,
  72.           ezért  ez   nem  igazán   súlyos  --   betöltéskor  ugorjunk
  73.           egyszerûen a blokk elejére.)
  74.               Meglepô módon hozzá is  tudunk fûzni az adott  file-hoz,
  75.           ami egyedi mutatvány, de igen hasznos. Figyelnünk kell arra,
  76.           hogy ez csak a file végére történhet, és csak akkor, ha  nem
  77.           vagyunk szerkesztô üzemmódban.
  78.               A szerkesztô üzemmód kicsit  macerás: a Hiew egyik  nagy
  79.           hátrányának  érzem,  hogy külön  üzemmód  a szerkesztés,  és
  80.           ilyenkor mintegy ""beragad"  a képernyô. Nem  lehet egyetlen
  81.           képernyônél  többet szerkeszteni  egyszerre. Elôny  viszont,
  82.           hogy  akár  bitenként is  szerkeszthetünk  egy byte-ot,  egy
  83.           wordöt vagy dwordöt.
  84.               A  Hiew legérdekesebb  szolgáltatása a  @KCrypt@N. Az  adott
  85.           byte-ot  vagy  szót elkódoló  utasítás(sorozat)ról  van szó,
  86.           amiben a 8086  aritmetikai utasításait használhatjuk.  Mivel
  87.           ez a  ""program" nem  ismételtethetô automatikusan,  nagyobb
  88.           területek kódolására  alkalmatlan, arra  kénytelenek vagyunk
  89.           valódi, futtatható programot írni.
  90.               Több  file-t  is  kezelhetünk  egyszerre,  de  a file-ok
  91.           aktuális pozíciójával furcsán bánik  a Hiew. Ha átlépünk  az
  92.           ""A" file-ból a ""B"-be,  akkor abban ugyanazon az  offseten
  93.           fogunk állni, mint az ""A"-ban. Ha azonban az ""A" hosszabb,
  94.           mint  a  ""B", és  olyan  offseten álltunk,  ami  a ""B"-ben
  95.           egyszerûen nem létezik, akkor nullázza ezt a mutatót, és  az
  96.           ""A"-ba visszatérve ott is a file elején találjuk  magunkat.
  97.           A  @KCrypt@N és  a keresés  beállításai is  öröklôdnek  file-ról
  98.           file-ra, de  ez --  az elôbbivel  ellentétben --  hasznosnak
  99.           tûnik. Szerencsére e hibára  is kínál megoldást a  Hiew, ami
  100.           ráadásul nemcsak a hiba elhárítására használható.
  101.               A  megoldást  a  Hiew  ""magazin"-nak  nevezi.  Ebben  a
  102.           magazinban 8 offset címet tárolhatunk, ezekre  tetszôlegesen
  103.           visszaléphetünk, ezenkívül törölhetjük az aktuálisat vagy az
  104.           összeset. Sajnos nem lehet megtekinteni, hogy melyik  milyen
  105.           értékû, nem is szerkeszthetôk.
  106.               Egy  másik  ugrálási  lehetôség  a  disassembler  módban
  107.           használható:  a  különbözô  JMP  és  CALL  utasítások nyomon
  108.           követése. Ezek  mellé a  Hiew zárójelben  ír egy  számot, az
  109.           ennek megfelelô gombot  megnyomva tekinthetjük meg  az ugrás
  110.           célját.  Ha  nagyon  sok  ugrás  van  a  képernyôn,  akkor a
  111.           betûgombokat is  igénybe kell  venni. Ha  50 soros üzemmódot
  112.           állítunk be, elôfordulhat, hogy nem elegendôk a betûk sem --
  113.           sajnos ilyenkor nincs mit tenni, egyszerre maximum 35 ugrást
  114.           tudunk követni. A késôbbiekben a [0] megnyomásával térhetünk
  115.           vissza, összesen maximum 15 alkalommal. Ha például 16 ugrást
  116.           követtünk  végig, akkor  mind a  15 elugrási  helyre  vissza
  117.           tudunk lépni. Ha 17-et, akkor csak egyet tudunk visszalépni.
  118.           Errôl  se  hiszem,  hogy szándékos  lenne,  de  ez most  így
  119.           mûködik.
  120.               Mindezekhez természetesen nem árt egy kis  dokumentáció.
  121.           Ez csak orosz nyelven hozzáférhetô, az on-line help  viszont
  122.           angol nyelvû. Ez sajnos nem terjed ki mindenre -- például  a
  123.           Crypthez  sincs  help.  A  help  csak  az  adott   üzemmódra
  124.           vonatkozik,  tehát nem  lehet egyben  átnézni a  programból.
  125.           Viszont  a  programon  kívül  igen:  a  help  egyetlen ASCII
  126.           szövegfile.
  127.               Összefoglalva:  a  Hiew  kiválóan  megfelel  a  kitûzött
  128.           célnak, néhány apró, bár bosszantó hibától eltekintve.
  129.  
  130.  
  131.           @VIDA 3.04@N
  132.  
  133.               Az IDA egy  igen érdekes disassembler  -- nemcsak a  gép
  134.           dolgozik a visszafejtésen, hanem mi is. Az IDA  disassembler
  135.           része egy legalább  386-os processzort igénylô  program, ami
  136.           ismer  minden  processzort  és  file-formátumot  amirôl csak
  137.           álmodni  lehet.  Például processzorok  terén  a ""triviális"
  138.           8086-tól Pentiumig terjedô Intel -- vagy azzal  kompatibilis
  139.           -- processzorokon  túl például  a Z80-at,  az i860-at  és az
  140.           i8085-öt is ismeri. A file-ok  nem csak sima .EXE vagy  .COM
  141.           file-ok lehetnek, hanem  DOS driverek (.SYS),  OS/2, Novell,
  142.           Windows file-ok -- sôt  a 3.04-es verzió már  COFF file-okat
  143.           is kezel (ilyeneket  DOS alatt a  DJGPP produkál, például  a
  144.           @KDisplay@N egy ismert példa  az ilyen programra). Az  Intel Hex
  145.           formátumot, de  még a  Borland C  overlay-eket is támogatja.
  146.           Mindezekbôl képes  .EXE, .COM,  .BIN file-okat  elôállítani,
  147.           mert  meg  is  lehet  változtatni  (patchelni)  a  betöltött
  148.           programot. Tud ASM és a debuggernek MAP file-t készíteni. Az
  149.           egészet  egy  C-szerû nyelven  vezérelhetjük.  Sajnos ASM-et
  150.           generálni csak a regisztrált felhasználók tudnak.
  151.               Ezek után  szóljunk az  érdekesebb részrôl!  Elôször is:
  152.           hogyan segíthetjük mi az IDA-t, hogy a segítségünkre legyen?
  153.           Például ha  már rájöttünk,  hogy egy  szubrutin mit  csinál,
  154.           akkor  beírunk  egy  megjegyzést  erre  vonatkozóan,  és  ez
  155.           bekerül   a   rutin   minden   egyes   meghívása   mellé.  A
  156.           hivatkozásokról az  IDA keresztreferencia-táblázatot  készít
  157.           és tart karban. Ebbe mi is beleszólhatunk (@KEdit/Jump Table@N).
  158.           Az  IDA   automatikusan  készít   címkéket,  de   ezeket  is
  159.           felülírhatjuk (@KEdit/Text/(Re)name current address...@N).
  160.               Az  IDA-nak  nincs  külsô  dokumentációja,  csak   belsô
  161.           súgója.  És  ami  szerintem  igen  nagy  gond,  ez  nem   is
  162.           kereshetô,  így  ha  meg  akarunk  csinálni  valamit,  akkor
  163.           megkereshetjük a súgóban, ami ugyanolyan szerkezetû, mint  a
  164.           menük... Tehát akkor már egyszerûbb a menükben megkeresni --
  165.           érdemes egyszer  végigmenni a  menükön, és  a számunkra  nem
  166.           triviális  menüpontokról  jegyzeteket  készíteni.  Ez  semmi
  167.           gondot  nem okozhat,  mert egy  beépített editor  is jár  az
  168.           IDA-hoz. A megjelenés  a Borland DOS-os  IDE-itôl megszokott
  169.           TurboVision.
  170.               Térjünk vissza  a disassemblerre,  mégpedig egy  gyakori
  171.           problémára: hogyan dönthetô el egy bizonyos adatsorról, hogy
  172.           az kód  vagy adat?  Az IDA  természetesen megkísérli  kódnak
  173.           vagy  adatnak  értelmezni,  de  a  továbbiban  nekünk   kell
  174.           döntenünk  (@KEdit/Analysis@N).  Definiálhatjuk  kódnak,   ASCII
  175.           szövegnek,    hexa    vagy    decimális    számnak.     Sôt,
  176.           felderítetlennek  is  bejelölhetjük,  ha  például  még   nem
  177.           tudjuk, hogy mire szolgál az  adott terület. Az IDA maga  is
  178.           tesz  ilyen  jeleket  olyan  helyekre,  melyekre  nem talált
  179.           semmilyen hivatkozást. Másrészt ha át akarunk definiálni egy
  180.           területet mondjuk adatról kódra, akkor elôször törölni  kell
  181.           az elôzô definíciót (@KUndefine@N).
  182.               Elôfordulhat,  hogy  az  IDA  maga  is  kódnak  szeretne
  183.           értelmezni egy-egy byte-sorozatot, de már korábban bejelölte
  184.           adatként. Ilyenkor ez bekerül a problémalistába, és  elôször
  185.           ""üresre" kell  definiálnunk, majd  ki kell  próbálni a  kód
  186.           opciót. Az erre vonatkozó hibaüzenet sajnos nem  egyértelmû:
  187.           ""Hint: Already defined  as data or  code". Ez pontosan  azt
  188.           jelenti, hogy megkísérelte definiálni valaminek, de már volt
  189.           ott valami -- a kézi módosítás igénye nélkül viszont könnyen
  190.           végtelen ciklusba eshetne a kódvisszafejtô algoritmus, ezért
  191.           nem definiálja át automatikusan.
  192.               Adat definiálásakor igen hosszú neveket generál az  IDA,
  193.           amit jobb megváltoztatni. Beállíthatjuk továbbá, hogy milyen
  194.           az adat hossza: 1, 2, 4 vagy 10 byte-os. Ez a beállítás  nem
  195.           expliciten  történik,  az  IDA  nem  kérdezi  meg,  hogy  az
  196.           adatokat DB, DW, DQ vagy DT prefixszel szeretnénk látni, ezt
  197.           a  @KEdit/Analysis/Data@N  menüpont  egymás  utáni  kiválasztása
  198.           (vagy a [D] lenyomása) lépteti.
  199.               Egy  utasítás  elsô  vagy  második  argumentumát szükség
  200.           szerint kézzel is  módosíthatjuk. Az argumentumokról  szólva
  201.           elôjön egy  másik gyakori  probléma: például  egy @KMOV BX,500@N
  202.           utasításról miként dönthetô el, hogy az az @K500@N egy  konstans
  203.           vagy  valaminek  az  offsetje? Ahol  az  IDA  ezt nem  tudja
  204.           megtenni,   oda   ""void"  jelzôket   tesz.   Ezeket  késôbb
  205.           természetesen  végig  lehet  keresni,  és  akkor  dönteni  e
  206.           problémáról.
  207.               Keresni sok  mindenre lehet  a @KNavigate@N  menü @KSearch for@N
  208.           opciójával:  az  említett  ""void"  utasításokra,  kód-   és
  209.           adatterületre,   szubrutinokra,   felderítetlen   --    azaz
  210.           definiálatlan   --    területre,   felderített    területre,
  211.           konstansra,  szövegre,  problémás  területre,  és  végül   a
  212.           program   ""core"-jában  (hex   dumpjában)  is   kutathatunk
  213.           valamilyen bináris kód után.
  214.               Ha már sikerült megértenünk valamennyit a programból, és
  215.           ez  elegendônek   tûnik  egy   kívánt  módosításhoz,   akkor
  216.           szerencsére   nem   kell   újrafordítani   az   egészet   --
  217.           módosíthatjuk  közvetlenül  a bináris  file-t  is. Ehhez  az
  218.           kell, hogy az aktuális byte-ot vagy wordöt  felderítetlennek
  219.           definiáljuk, és már  lehet is patchelni  az @KEdit@N menü  @KPatch
  220.           @Kcore@N almenüjében.
  221.  
  222.           @KNégyesi Károly@N
  223.  
  224.           @<9510\HIEW2.GIF>■■@N  A  Hiew ilyet is tud: .EXE fejléc szerkesztése
  225.  
  226.           @<9510\IDA1.GIF>■■@N  IDA: egy problémás kódterület javítás elôtt ...
  227.  
  228.           @<9510\ida2.gif>■■@N  ...és után
  229.